/**
 * 统一响应格式中间件
 * 标准化API响应格式
 */

/**
 * 成功响应
 * @param {Object} res - Express响应对象
 * @param {Object} data - 响应数据
 * @param {string} message - 响应消息
 * @param {number} code - 状态码，默认200
 */
const successResponse = (res, data = null, message = '操作成功', code = 200) => {
  return res.status(code).json({
    success: true,
    code,
    message,
    data,
    timestamp: new Date().toISOString(),
  });
};

/**
 * 错误响应
 * @param {Object} res - Express响应对象
 * @param {string} message - 错误消息
 * @param {number} code - 状态码，默认400
 * @param {Object} errorDetails - 错误详情
 */
const errorResponse = (res, message = '操作失败', code = 400, errorDetails = null) => {
  const response = {
    success: false,
    code,
    message,
    timestamp: new Date().toISOString(),
  };

  if (errorDetails && process.env.NODE_ENV !== 'production') {
    response.errorDetails = errorDetails;
  }

  return res.status(code).json(response);
};

/**
 * 未授权响应
 * @param {Object} res - Express响应对象
 * @param {string} message - 错误消息
 */
const unauthorizedResponse = (res, message = '未授权，请重新登录') => {
  return res.status(401).json({
    success: false,
    code: 401,
    message,
    needReauth: true,
    timestamp: new Date().toISOString(),
  });
};

/**
 * 未找到响应
 * @param {Object} res - Express响应对象
 * @param {string} message - 错误消息
 */
const notFoundResponse = (res, message = '资源不存在') => {
  return res.status(404).json({
    success: false,
    code: 404,
    message,
    timestamp: new Date().toISOString(),
  });
};

module.exports = {
  successResponse,
  errorResponse,
  unauthorizedResponse,
  notFoundResponse,
};

